package com.hangxin.commons.util.date;

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 2011-5-31 
 * @author fq
 *
 */
public class DateUtil {

	private static DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	//获取当前时间Timestamp对象
	public static Timestamp getCurrentTimestamp()
	{
		return new Timestamp(System.currentTimeMillis());	
	}
	/**
	 * 当前日期是否在两个日期中间
	 * @param 开始日期
	 * @param 结束日期为实际时间加1天
	 * true 为在中间
	 */
	static public boolean validateMiddle(String begin,String end) throws ParseException
	{
		
		Date date1 = new Date(); //当前日期
		Date date2 = sdf.parse(begin);
		Date date3 = sdf.parse(end);
		return date1.before(date3)&&date1.after(date2);
	}
	/**
	 * 当前日期是否在日期前
	 * @param 日期
	 * true 为在参数日期前
	 */
	static public boolean validatebefore(String begin) throws ParseException
	{
		DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date1 = new Date();
		Date date2 = sdf.parse(begin);
		return date1.before(date2);
	}
	/**
	 * 当前日期是否在日期后
	 * @param 日期
	 * true 为在参数日期后
	 */
	static public boolean validateafter(String end) throws ParseException
	{
		DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date1 = new Date();
		Date date2 = sdf.parse(end);
		return date1.after(date2);
	}
	/**
	 * 字符串转日期
	 * @param 字符串
	 * 
	 */
	static public Date strtodate(String str) throws ParseException
	{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		return sdf.parse(str);
	}
	/**
	 * 当前日期
	 * 
	 */
	static public String datetostr()
	{
		return sdf.format(new Date());
	}
	/**
	 * 加减年
	 * @param 日期串，加几减年
	 * 
	 */
	static public String addSubYear(String date,int yearnum)
	{		  
		 Date temp_date = null;
     try {   
	        Date d = sdf.parse(date);   
	        Calendar c = Calendar.getInstance();   
	        c.setTime(d);   
	        c.add(Calendar.YEAR, yearnum);//属性很多也有月等等，可以操作各种时间日期     
	        temp_date = c.getTime();     
     } catch (ParseException e) {   
         e.printStackTrace();   
     }
     return sdf.format(temp_date);
	}
		
	/**
	 * 加减月
	 * @param 日期串，加减月
	 * 
	 */
	static public String addSubMonth(String date,int monthnum)
	{		  
		 Date temp_date = null;
     try {   
	        Date d = sdf.parse(date);   
	        Calendar c = Calendar.getInstance();   
	        c.setTime(d);   
	        c.add(Calendar.MONTH, monthnum);     
	        temp_date = c.getTime();     
     } catch (ParseException e) {   
         e.printStackTrace();   
     }
     return sdf.format(temp_date);
	}
	
	/**
	 * 加减日
	 * @param 日期串，加减日
	 * 
	 */
	static public String addSubDay(String date,int daynum)
	{		  
		 Date temp_date = null;
     try {   
	        Date d = sdf.parse(date);   
	        Calendar c = Calendar.getInstance();   
	        c.setTime(d);   
	        c.add(Calendar.DATE, daynum);     
	        temp_date = c.getTime();     
     } catch (ParseException e) {   
         e.printStackTrace();   
     }
     return sdf.format(temp_date);
	}
	
	//获取某年某月第一天
	static public String getFirstDayOfMonth(int year, int month) {
		  Calendar cal = Calendar.getInstance();
		  cal.set(Calendar.YEAR, year);
		  cal.set(Calendar.MONTH, month-1);
		  cal.set(Calendar.DAY_OF_MONTH, cal.getMinimum(Calendar.DATE));
		  return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
		 }
	
	//获取某年某月最后一天
	 static public String getLastDayOfMonth(int year, int month) {
		 Calendar cal = Calendar.getInstance();
		 cal.set(Calendar.YEAR, year);
		 cal.set(Calendar.MONTH, month-1);
		  cal.set(Calendar.DAY_OF_MONTH, 1);
		 int value = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
		 cal.set(Calendar.DAY_OF_MONTH, value);
		 return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
}


}
